home *** CD-ROM | disk | FTP | other *** search
/ SGI Freeware 1999 August / SGI Freeware 1999 August.iso / dist / fw_xemacs.idb / usr / freeware / lib / xemacs-20.4 / info / gnus.info-6.z / gnus.info-6
Encoding:
GNU Info File  |  1998-05-21  |  49.6 KB  |  1,270 lines

  1. This is Info file ../info/gnus.info, produced by Makeinfo version 1.68
  2. from the input file gnus.texi.
  3.  
  4.    This file documents Gnus, the GNU Emacs newsreader.
  5.  
  6.    Copyright (C) 1995,96 Free Software Foundation, Inc.
  7.  
  8.    Permission is granted to make and distribute verbatim copies of this
  9. manual provided the copyright notice and this permission notice are
  10. preserved on all copies.
  11.  
  12.    Permission is granted to copy and distribute modified versions of
  13. this manual under the conditions for verbatim copying, provided also
  14. that the entire resulting derived work is distributed under the terms
  15. of a permission notice identical to this one.
  16.  
  17.    Permission is granted to copy and distribute translations of this
  18. manual into another language, under the above conditions for modified
  19. versions.
  20.  
  21. 
  22. File: gnus.info,  Node: Splitting Mail,  Next: Mail Backend Variables,  Prev: Getting Started Reading Mail,  Up: Getting Mail
  23.  
  24. Splitting Mail
  25. --------------
  26.  
  27.    The `nnmail-split-methods' variable says how the incoming mail is to
  28. be split into groups.
  29.  
  30.      (setq nnmail-split-methods
  31.        '(("mail.junk" "^From:.*Lars Ingebrigtsen")
  32.          ("mail.crazy" "^Subject:.*die\\|^Organization:.*flabby")
  33.          ("mail.other" "")))
  34.  
  35.    This variable is a list of lists, where the first element of each of
  36. these lists is the name of the mail group (they do not have to be called
  37. something beginning with `mail', by the way), and the second element is
  38. a regular expression used on the header of each mail to determine if it
  39. belongs in this mail group.
  40.  
  41.    If the first element is the special symbol `junk', then messages
  42. that match the regexp will disappear into the aether.  Use with extreme
  43. caution.
  44.  
  45.    The second element can also be a function.  In that case, it will be
  46. called narrowed to the headers with the first element of the rule as the
  47. argument.  It should return a non-`nil' value if it thinks that the
  48. mail belongs in that group.
  49.  
  50.    The last of these groups should always be a general one, and the
  51. regular expression should *always* be `' so that it matches any mails
  52. that haven't been matched by any of the other regexps.  (These rules are
  53. processed from the beginning of the alist toward the end.  The first
  54. rule to make a match will "win", unless you have crossposting enabled.
  55. In that case, all matching rules will "win".)
  56.  
  57.    If you like to tinker with this yourself, you can set this variable
  58. to a function of your choice.  This function will be called without any
  59. arguments in a buffer narrowed to the headers of an incoming mail
  60. message.  The function should return a list of group names that it
  61. thinks should carry this mail message.
  62.  
  63.    Note that the mail backends are free to maul the poor, innocent,
  64. incoming headers all they want to.  They all add `Lines' headers; some
  65. add `X-Gnus-Group' headers; most rename the Unix mbox `From<SPACE>'
  66. line to something else.
  67.  
  68.    The mail backends all support cross-posting.  If several regexps
  69. match, the mail will be "cross-posted" to all those groups.
  70. `nnmail-crosspost' says whether to use this mechanism or not.  Note
  71. that no articles are crossposted to the general (`') group.
  72.  
  73.    `nnmh' and `nnml' makes crossposts by creating hard links to the
  74. crossposted articles.  However, not all file systems support hard
  75. links.  If that's the case for you, set
  76. `nnmail-crosspost-link-function' to `copy-file'.  (This variable is
  77. `add-name-to-file' by default.)
  78.  
  79.    If you wish to see where the previous mail split put the messages,
  80. you can use the `M-x nnmail-split-history' command.
  81.  
  82.    Gnus gives you all the opportunity you could possibly want for
  83. shooting yourself in the foot.  Let's say you create a group that will
  84. contain all the mail you get from your boss.  And then you accidentally
  85. unsubscribe from the group.  Gnus will still put all the mail from your
  86. boss in the unsubscribed group, and so, when your boss mails you "Have
  87. that report ready by Monday or you're fired!", you'll never see it and,
  88. come Tuesday, you'll still believe that you're gainfully employed while
  89. you really should be out collecting empty bottles to save up for next
  90. month's rent money.
  91.  
  92. 
  93. File: gnus.info,  Node: Mail Backend Variables,  Next: Fancy Mail Splitting,  Prev: Splitting Mail,  Up: Getting Mail
  94.  
  95. Mail Backend Variables
  96. ----------------------
  97.  
  98.    These variables are (for the most part) pertinent to all the various
  99. mail backends.
  100.  
  101. `nnmail-read-incoming-hook'
  102.      The mail backends all call this hook after reading new mail.  You
  103.      can use this hook to notify any mail watch programs, if you want
  104.      to.
  105.  
  106. `nnmail-spool-file'
  107.      The backends will look for new mail in this file.  If this
  108.      variable is `nil', the mail backends will never attempt to fetch
  109.      mail by themselves.  If you are using a POP mail server and your
  110.      name is `larsi', you should set this variable to `po:larsi'.  If
  111.      your name is not `larsi', you should probably modify that
  112.      slightly, but you may have guessed that already, you smart &
  113.      handsome devil!  You can also set this variable to `pop', and Gnus
  114.      will try to figure out the POP mail string by itself.  In any
  115.      case, Gnus will call `movemail' which will contact the POP server
  116.      named in the `MAILHOST' environment variable.  If the POP server
  117.      needs a password, you can either set
  118.      `nnmail-pop-password-required' to `t' and be prompted for the
  119.      password, or set `nnmail-pop-password' to the password itself.
  120.  
  121.      `nnmail-spool-file' can also be a list of mailboxes.
  122.  
  123.      Your Emacs has to have been configured with `--with-pop' before
  124.      compilation.  This is the default, but some installations have it
  125.      switched off.
  126.  
  127.      When you use a mail backend, Gnus will slurp all your mail from
  128.      your inbox and plonk it down in your home directory.  Gnus doesn't
  129.      move any mail if you're not using a mail backend--you have to do a
  130.      lot of magic invocations first.  At the time when you have
  131.      finished drawing the pentagram, lightened the candles, and
  132.      sacrificed the goat, you really shouldn't be too surprised when
  133.      Gnus moves your mail.
  134.  
  135. `nnmail-use-procmail'
  136.      If non-`nil', the mail backends will look in
  137.      `nnmail-procmail-directory' for incoming mail.  All the files in
  138.      that directory that have names ending in `nnmail-procmail-suffix'
  139.      will be considered incoming mailboxes, and will be searched for new
  140.      mail.
  141.  
  142. `nnmail-crash-box'
  143.      When a mail backend reads a spool file, mail is first moved to this
  144.      file, which is `~/.gnus-crash-box' by default.  If this file
  145.      already exists, it will always be read (and incorporated) before
  146.      any other spool files.
  147.  
  148. `nnmail-prepare-incoming-hook'
  149.      This is run in a buffer that holds all the new incoming mail, and
  150.      can be used for, well, anything, really.
  151.  
  152. `nnmail-split-hook'
  153.      Hook run in the buffer where the mail headers of each message is
  154.      kept just before the splitting based on these headers is done.
  155.      The hook is free to modify the buffer contents in any way it sees
  156.      fit--the buffer is discarded after the splitting has been done,
  157.      and no changes performed in the buffer will show up in any files.
  158.      `gnus-article-decode-rfc1522' is one likely function to add to
  159.      this hook.
  160.  
  161. `nnmail-pre-get-new-mail-hook'
  162. `nnmail-post-get-new-mail-hook'
  163.      These are two useful hooks executed when treating new incoming
  164.      mail--`nnmail-pre-get-new-mail-hook' (is called just before
  165.      starting to handle the new mail) and
  166.      `nnmail-post-get-new-mail-hook' (is called when the mail handling
  167.      is done).  Here's and example of using these two hooks to change
  168.      the default file modes the new mail files get:
  169.  
  170.           (add-hook 'gnus-pre-get-new-mail-hook
  171.                     (lambda () (set-default-file-modes 511)))
  172.           
  173.           (add-hook 'gnus-post-get-new-mail-hook
  174.                     (lambda () (set-default-file-modes 551)))
  175.  
  176. `nnmail-tmp-directory'
  177.      This variable says where to move incoming mail to - while
  178.      processing it.  This is usually done in the same directory that
  179.      the mail backend inhabits (e.g., `~/Mail/'), but if this variable
  180.      is non-`nil', it will be used instead.
  181.  
  182. `nnmail-movemail-program'
  183.      This program is executed to move mail from the user's inbox to her
  184.      home directory.  The default is `movemail'.
  185.  
  186.      This can also be a function.  In that case, the function will be
  187.      called with two parameters - the name of the inbox, and the file
  188.      to be moved to.
  189.  
  190. `nnmail-delete-incoming'
  191.      If non-`nil', the mail backends will delete the temporary incoming
  192.      file after splitting mail into the proper groups.  This is `t' by
  193.      default.
  194.  
  195.      (No Gnus release since (ding) Gnus 0.10 (or something like that)
  196.      have lost mail, I think, but that's not the point.  (Except
  197.      certain versions of Red Gnus.))  By not deleting the Incoming*
  198.      files, one can be sure not to lose mail - if Gnus totally whacks
  199.      out, one can always recover what was lost.
  200.  
  201.      You may delete the `Incoming*' files at will.
  202.  
  203. `nnmail-use-long-file-names'
  204.      If non-`nil', the mail backends will use long file and directory
  205.      names.  Groups like `mail.misc' will end up in directories
  206.      (assuming use of `nnml' backend) or files (assuming use of
  207.      `nnfolder' backend) like `mail.misc'.  If it is `nil', the same
  208.      group will end up in `mail/misc'.
  209.  
  210. `nnmail-delete-file-function'
  211.      Function called to delete files.  It is `delete-file' by default.
  212.  
  213. `nnmail-cache-accepted-message-ids'
  214.      If non-`nil', put the `Message-ID's of articles imported into the
  215.      backend (via `Gcc', for instance) into the mail duplication
  216.      discovery cache.  The default is `nil'.
  217.  
  218. 
  219. File: gnus.info,  Node: Fancy Mail Splitting,  Next: Mail and Procmail,  Prev: Mail Backend Variables,  Up: Getting Mail
  220.  
  221. Fancy Mail Splitting
  222. --------------------
  223.  
  224.    If the rather simple, standard method for specifying how to split
  225. mail doesn't allow you to do what you want, you can set
  226. `nnmail-split-methods' to `nnmail-split-fancy'.  Then you can play with
  227. the `nnmail-split-fancy' variable.
  228.  
  229.    Let's look at an example value of this variable first:
  230.  
  231.      ;; Messages from the mailer daemon are not crossposted to any of
  232.      ;; the ordinary groups.  Warnings are put in a separate group
  233.      ;; from real errors.
  234.      (| ("from" mail (| ("subject" "warn.*" "mail.warning")
  235.                         "mail.misc"))
  236.         ;; Non-error messages are crossposted to all relevant
  237.         ;; groups, but we don't crosspost between the group for the
  238.         ;; (ding) list and the group for other (ding) related mail.
  239.         (& (| (any "ding@ifi\\.uio\\.no" "ding.list")
  240.               ("subject" "ding" "ding.misc"))
  241.            ;; Other mailing lists...
  242.            (any "procmail@informatik\\.rwth-aachen\\.de" "procmail.list")
  243.            (any "SmartList@informatik\\.rwth-aachen\\.de" "SmartList.list")
  244.            ;; People...
  245.            (any "larsi@ifi\\.uio\\.no" "people.Lars_Magne_Ingebrigtsen"))
  246.         ;; Unmatched mail goes to the catch all group.
  247.         "misc.misc")
  248.  
  249.    This variable has the format of a "split".  A split is a (possibly)
  250. recursive structure where each split may contain other splits.  Here are
  251. the five possible split syntaxes:
  252.  
  253.   1. `group': If the split is a string, that will be taken as a group
  254.      name.
  255.  
  256.   2. (FIELD VALUE SPLIT): If the split is a list, the first element of
  257.      which is a string, then store the message as specified by SPLIT, if
  258.      header FIELD (a regexp) contains VALUE (also a regexp).
  259.  
  260.   3. (| SPLIT...): If the split is a list, and the first element is `|'
  261.      (vertical bar), then process each SPLIT until one of them matches.
  262.      A SPLIT is said to match if it will cause the mail message to be
  263.      stored in one or more groups.
  264.  
  265.   4. (& SPLIT...): If the split is a list, and the first element is
  266.      `&', then process all SPLITs in the list.
  267.  
  268.   5. `junk': If the split is the symbol `junk', then don't save this
  269.      message anywhere.
  270.  
  271.   6. (: FUNCTION ARG1 ARG2 ...):  If the split is a list, and the first
  272.      element is `:', then the second element will be called as a
  273.      function with ARGS given as arguments.  The function should return
  274.      a SPLIT.
  275.  
  276.  
  277.    In these splits, FIELD must match a complete field name.  VALUE must
  278. match a complete word according to the fundamental mode syntax table.
  279. You can use `.*' in the regexps to match partial field names or words.
  280. In other words, all VALUE's are wrapped in `\<' and `\>' pairs.
  281.  
  282.    FIELD and VALUE can also be lisp symbols, in that case they are
  283. expanded as specified by the variable `nnmail-split-abbrev-alist'.
  284. This is an alist of cons cells, where the `car' of a cell contains the
  285. key, and the `cdr' contains the associated value.
  286.  
  287.    `nnmail-split-fancy-syntax-table' is the syntax table in effect when
  288. all this splitting is performed.
  289.  
  290.    If you want to have Gnus create groups dynamically based on some
  291. information in the headers (i.e., do `replace-match'-like substitions
  292. in the group names), you can say things like:
  293.  
  294.      (any "debian-\(\\w*\\)@lists.debian.org" "mail.debian.\\1")
  295.  
  296. 
  297. File: gnus.info,  Node: Mail and Procmail,  Next: Incorporating Old Mail,  Prev: Fancy Mail Splitting,  Up: Getting Mail
  298.  
  299. Mail and Procmail
  300. -----------------
  301.  
  302.    Many people use `procmail' (or some other mail filter program or
  303. external delivery agent--`slocal', `elm', etc) to split incoming mail
  304. into groups.  If you do that, you should set `nnmail-spool-file' to
  305. `procmail' to ensure that the mail backends never ever try to fetch
  306. mail by themselves.
  307.  
  308.    This also means that you probably don't want to set
  309. `nnmail-split-methods' either, which has some, perhaps, unexpected side
  310. effects.
  311.  
  312.    When a mail backend is queried for what groups it carries, it replies
  313. with the contents of that variable, along with any groups it has figured
  314. out that it carries by other means.  None of the backends, except
  315. `nnmh', actually go out to the disk and check what groups actually
  316. exist.  (It's not trivial to distinguish between what the user thinks is
  317. a basis for a newsgroup and what is just a plain old file or directory.)
  318.  
  319.    This means that you have to tell Gnus (and the backends) by hand what
  320. groups exist.
  321.  
  322.    Let's take the `nnmh' backend as an example:
  323.  
  324.    The folders are located in `nnmh-directory', say, `~/Mail/'.  There
  325. are three folders, `foo', `bar' and `mail.baz'.
  326.  
  327.    Go to the group buffer and type `G m'.  When prompted, answer `foo'
  328. for the name and `nnmh' for the method.  Repeat twice for the two other
  329. groups, `bar' and `mail.baz'.  Be sure to include all your mail groups.
  330.  
  331.    That's it.  You are now set to read your mail.  An active file for
  332. this method will be created automatically.
  333.  
  334.    If you use `nnfolder' or any other backend that store more than a
  335. single article in each file, you should never have procmail add mails to
  336. the file that Gnus sees.  Instead, procmail should put all incoming mail
  337. in `nnmail-procmail-directory'.  To arrive at the file name to put the
  338. incoming mail in, append `nnmail-procmail-suffix' to the group name.
  339. The mail backends will read the mail from these files.
  340.  
  341.    When Gnus reads a file called `mail.misc.spool', this mail will be
  342. put in the `mail.misc', as one would expect.  However, if you want Gnus
  343. to split the mail the normal way, you could set
  344. `nnmail-resplit-incoming' to `t'.
  345.  
  346.    If you use `procmail' to split things directly into an `nnmh'
  347. directory (which you shouldn't do), you should set
  348. `nnmail-keep-last-article' to non-`nil' to prevent Gnus from ever
  349. expiring the final article (i.e., the article with the highest article
  350. number) in a mail newsgroup.  This is quite, quite important.
  351.  
  352.    Here's an example setup:  The incoming spools are located in
  353. `~/incoming/' and have `""' as suffixes (i.e., the incoming spool files
  354. have the same names as the equivalent groups).  The `nnfolder' backend
  355. is to be used as the mail interface, and the `nnfolder' directory is
  356. `~/fMail/'.
  357.  
  358.      (setq nnfolder-directory "~/fMail/")
  359.      (setq nnmail-spool-file 'procmail)
  360.      (setq nnmail-procmail-directory "~/incoming/")
  361.      (setq gnus-secondary-select-methods '((nnfolder "")))
  362.      (setq nnmail-procmail-suffix "")
  363.  
  364. 
  365. File: gnus.info,  Node: Incorporating Old Mail,  Next: Expiring Mail,  Prev: Mail and Procmail,  Up: Getting Mail
  366.  
  367. Incorporating Old Mail
  368. ----------------------
  369.  
  370.    Most people have lots of old mail stored in various file formats.  If
  371. you have set up Gnus to read mail using one of the spiffy Gnus mail
  372. backends, you'll probably wish to have that old mail incorporated into
  373. your mail groups.
  374.  
  375.    Doing so can be quite easy.
  376.  
  377.    To take an example: You're reading mail using `nnml' (*note Mail
  378. Spool::.), and have set `nnmail-split-methods' to a satisfactory value
  379. (*note Splitting Mail::.).  You have an old Unix mbox file filled with
  380. important, but old, mail.  You want to move it into your `nnml' groups.
  381.  
  382.    Here's how:
  383.  
  384.   1. Go to the group buffer.
  385.  
  386.   2. Type `G f' and give the path to the mbox file when prompted to
  387.      create an `nndoc' group from the mbox file (*note Foreign
  388.      Groups::.).
  389.  
  390.   3. Type `SPACE' to enter the newly created group.
  391.  
  392.   4. Type `M P b' to process-mark all articles in this group's buffer
  393.      (*note Setting Process Marks::.).
  394.  
  395.   5. Type `B r' to respool all the process-marked articles, and answer
  396.      `nnml' when prompted (*note Mail Group Commands::.).
  397.  
  398.    All the mail messages in the mbox file will now also be spread out
  399. over all your `nnml' groups.  Try entering them and check whether things
  400. have gone without a glitch.  If things look ok, you may consider
  401. deleting the mbox file, but I wouldn't do that unless I was absolutely
  402. sure that all the mail has ended up where it should be.
  403.  
  404.    Respooling is also a handy thing to do if you're switching from one
  405. mail backend to another.  Just respool all the mail in the old mail
  406. groups using the new mail backend.
  407.  
  408. 
  409. File: gnus.info,  Node: Expiring Mail,  Next: Washing Mail,  Prev: Incorporating Old Mail,  Up: Getting Mail
  410.  
  411. Expiring Mail
  412. -------------
  413.  
  414.    Traditional mail readers have a tendency to remove mail articles when
  415. you mark them as read, in some way.  Gnus takes a fundamentally
  416. different approach to mail reading.
  417.  
  418.    Gnus basically considers mail just to be news that has been received
  419. in a rather peculiar manner.  It does not think that it has the power to
  420. actually change the mail, or delete any mail messages.  If you enter a
  421. mail group, and mark articles as "read", or kill them in some other
  422. fashion, the mail articles will still exist on the system.  I repeat:
  423. Gnus will not delete your old, read mail.  Unless you ask it to, of
  424. course.
  425.  
  426.    To make Gnus get rid of your unwanted mail, you have to mark the
  427. articles as "expirable".  This does not mean that the articles will
  428. disappear right away, however.  In general, a mail article will be
  429. deleted from your system if, 1) it is marked as expirable, AND 2) it is
  430. more than one week old.  If you do not mark an article as expirable, it
  431. will remain on your system until hell freezes over.  This bears
  432. repeating one more time, with some spurious capitalizations: IF you do
  433. NOT mark articles as EXPIRABLE, Gnus will NEVER delete those ARTICLES.
  434.  
  435.    You do not have to mark articles as expirable by hand.  Groups that
  436. match the regular expression `gnus-auto-expirable-newsgroups' will have
  437. all articles that you read marked as expirable automatically.  All
  438. articles marked as expirable have an `E' in the first column in the
  439. summary buffer.
  440.  
  441.    By default, if you have auto expiry switched on, Gnus will mark all
  442. the articles you read as expirable, no matter if they were read or
  443. unread before.  To avoid having articles marked as read marked as
  444. expirable automatically, you can put something like the following in
  445. your `.gnus' file:
  446.  
  447.      (remove-hook 'gnus-mark-article-hook
  448.                   'gnus-summary-mark-read-and-unread-as-read)
  449.      (add-hook 'gnus-mark-article-hook 'gnus-summary-mark-unread-as-read)
  450.  
  451.    Note that making a group auto-expirable doesn't mean that all read
  452. articles are expired--only the articles marked as expirable will be
  453. expired.  Also note that using the `d' command won't make groups
  454. expirable--only semi-automatic marking of articles as read will mark
  455. the articles as expirable in auto-expirable groups.
  456.  
  457.    Let's say you subscribe to a couple of mailing lists, and you want
  458. the articles you have read to disappear after a while:
  459.  
  460.      (setq gnus-auto-expirable-newsgroups
  461.            "mail.nonsense-list\\|mail.nice-list")
  462.  
  463.    Another way to have auto-expiry happen is to have the element
  464. `auto-expire' in the group parameters of the group.
  465.  
  466.    If you use adaptive scoring (*note Adaptive Scoring::.) and
  467. auto-expiring, you'll have problems.  Auto-expiring and adaptive scoring
  468. don't really mix very well.
  469.  
  470.    The `nnmail-expiry-wait' variable supplies the default time an
  471. expirable article has to live.  Gnus starts counting days from when the
  472. message *arrived*, not from when it was sent.  The default is seven
  473. days.
  474.  
  475.    Gnus also supplies a function that lets you fine-tune how long
  476. articles are to live, based on what group they are in.  Let's say you
  477. want to have one month expiry period in the `mail.private' group, a one
  478. day expiry period in the `mail.junk' group, and a six day expiry period
  479. everywhere else:
  480.  
  481.      (setq nnmail-expiry-wait-function
  482.            (lambda (group)
  483.             (cond ((string= group "mail.private")
  484.                     31)
  485.                   ((string= group "mail.junk")
  486.                     1)
  487.                   ((string= group "important")
  488.                     'never)
  489.                   (t
  490.                     6))))
  491.  
  492.    The group names this function is fed are "unadorned" group names--no
  493. `nnml:' prefixes and the like.
  494.  
  495.    The `nnmail-expiry-wait' variable and `nnmail-expiry-wait-function'
  496. function can either be a number (not necessarily an integer) or one of
  497. the symbols `immediate' or `never'.
  498.  
  499.    You can also use the `expiry-wait' group parameter to selectively
  500. change the expiry period (*note Group Parameters::.).
  501.  
  502.    If `nnmail-keep-last-article' is non-`nil', Gnus will never expire
  503. the final article in a mail newsgroup.  This is to make life easier for
  504. procmail users.
  505.  
  506.    By the way: That line up there, about Gnus never expiring
  507. non-expirable articles, is a lie.  If you put `total-expire' in the
  508. group parameters, articles will not be marked as expirable, but all read
  509. articles will be put through the expiry process.  Use with extreme
  510. caution.  Even more dangerous is the `gnus-total-expirable-newsgroups'
  511. variable.  All groups that match this regexp will have all read
  512. articles put through the expiry process, which means that *all* old
  513. mail articles in the groups in question will be deleted after a while.
  514. Use with extreme caution, and don't come crying to me when you discover
  515. that the regexp you used matched the wrong group and all your important
  516. mail has disappeared.  Be a *man*!  Or a *woman*!  Whatever you feel
  517. more comfortable with!  So there!
  518.  
  519.    Most people make most of their mail groups total-expirable, though.
  520.  
  521. 
  522. File: gnus.info,  Node: Washing Mail,  Next: Duplicates,  Prev: Expiring Mail,  Up: Getting Mail
  523.  
  524. Washing Mail
  525. ------------
  526.  
  527.    Mailers and list servers are notorious for doing all sorts of really,
  528. really stupid things with mail.  "Hey, RFC822 doesn't explicitly
  529. prohibit us from adding the string `wE aRe ElItE!!!!!1!!' to the end of
  530. all lines passing through our server, so let's do that!!!!1!"  Yes, but
  531. RFC822 wasn't designed to be read by morons.  Things that were
  532. considered to be self-evident were not discussed.  So.  Here we are.
  533.  
  534.    Case in point:  The German version of Microsoft Exchange adds `AW: '
  535. to the subjects of replies instead of `Re: '.  I could pretend to be
  536. shocked and dismayed by this, but I haven't got the energy.  It is to
  537. laugh.
  538.  
  539.    Gnus provides a plethora of functions for washing articles while
  540. displaying them, but it might be nicer to do the filtering before
  541. storing the mail to disc.  For that purpose, we have three hooks and
  542. various functions that can be put in these hooks.
  543.  
  544. `nnmail-prepare-incoming-hook'
  545.      This hook is called before doing anything with the mail and is
  546.      meant for grand, sweeping gestures.  Functions to be used include:
  547.  
  548.     `nnheader-ms-strip-cr'
  549.           Remove trailing carriage returns from each line.  This is
  550.           default on Emacs running on MS machines.
  551.  
  552. `nnmail-prepare-incoming-header-hook'
  553.      This hook is called narrowed to each header.  It can be used when
  554.      cleaning up the headers.  Functions that can be used include:
  555.  
  556.     `nnmail-remove-leading-whitespace'
  557.           Clear leading white space that "helpful" listservs have added
  558.           to the headers to make them look nice.  Aaah.
  559.  
  560.     `nnmail-remove-list-identifiers'
  561.           Some list servers add an identifier--for example, `(idm)'--to
  562.           the beginning of all `Subject' headers.  I'm sure that's nice
  563.           for people who use stone age mail readers.  This function
  564.           will remove strings that match the `nnmail-list-identifiers'
  565.           regexp, which can also be a list of regexp.
  566.  
  567.           For instance, if you want to remove the `(idm)' and the
  568.           `nagnagnag' identifiers:
  569.  
  570.                (setq nnmail-list-identifiers
  571.                      '("(idm)" "nagnagnag"))
  572.  
  573.     `nnmail-remove-tabs'
  574.           Translate all `TAB' characters into `SPACE' characters.
  575.  
  576. `nnmail-prepare-incoming-message-hook'
  577.      This hook is called narrowed to each message.  Functions to be used
  578.      include:
  579.  
  580.     `article-de-quoted-unreadable'
  581.           Decode Quoted Readable encoding.
  582.  
  583. 
  584. File: gnus.info,  Node: Duplicates,  Next: Not Reading Mail,  Prev: Washing Mail,  Up: Getting Mail
  585.  
  586. Duplicates
  587. ----------
  588.  
  589.    If you are a member of a couple of mailing lists, you will sometimes
  590. receive two copies of the same mail.  This can be quite annoying, so
  591. `nnmail' checks for and treats any duplicates it might find.  To do
  592. this, it keeps a cache of old `Message-ID's--
  593. `nnmail-message-id-cache-file', which is `~/.nnmail-cache' by default.
  594. The approximate maximum number of `Message-ID's stored there is
  595. controlled by the `nnmail-message-id-cache-length' variable, which is
  596. 1000 by default. (So 1000 `Message-ID's will be stored.) If all this
  597. sounds scary to you, you can set `nnmail-treat-duplicates' to `warn'
  598. (which is what it is by default), and `nnmail' won't delete duplicate
  599. mails.  Instead it will insert a warning into the head of the mail
  600. saying that it thinks that this is a duplicate of a different message.
  601.  
  602.    This variable can also be a function.  If that's the case, the
  603. function will be called from a buffer narrowed to the message in
  604. question with the `Message-ID' as a parameter.  The function must
  605. return either `nil', `warn', or `delete'.
  606.  
  607.    You can turn this feature off completely by setting the variable to
  608. `nil'.
  609.  
  610.    If you want all the duplicate mails to be put into a special
  611. "duplicates" group, you could do that using the normal mail split
  612. methods:
  613.  
  614.      (setq nnmail-split-fancy
  615.            '(| ;; Messages duplicates go to a separate group.
  616.                ("gnus-warning" "duplication of message" "duplicate")
  617.                ;; Message from daemons, postmaster, and the like to another.
  618.                (any mail "mail.misc")
  619.                ;; Other rules.
  620.                [ ... ] ))
  621.  
  622.    Or something like:
  623.      (setq nnmail-split-methods
  624.            '(("duplicates" "^Gnus-Warning:")
  625.              ;; Other rules.
  626.              [...]))
  627.  
  628.    Here's a neat feature: If you know that the recipient reads her mail
  629. with Gnus, and that she has `nnmail-treat-duplicates' set to `delete',
  630. you can send her as many insults as you like, just by using a
  631. `Message-ID' of a mail that you know that she's already received.
  632. Think of all the fun!  She'll never see any of it!  Whee!
  633.  
  634. 
  635. File: gnus.info,  Node: Not Reading Mail,  Next: Choosing a Mail Backend,  Prev: Duplicates,  Up: Getting Mail
  636.  
  637. Not Reading Mail
  638. ----------------
  639.  
  640.    If you start using any of the mail backends, they have the annoying
  641. habit of assuming that you want to read mail with them.  This might not
  642. be unreasonable, but it might not be what you want.
  643.  
  644.    If you set `nnmail-spool-file' to `nil', none of the backends will
  645. ever attempt to read incoming mail, which should help.
  646.  
  647.    This might be too much, if, for instance, you are reading mail quite
  648. happily with `nnml' and just want to peek at some old RMAIL file you
  649. have stashed away with `nnbabyl'.  All backends have variables called
  650. backend-`get-new-mail'.  If you want to disable the `nnbabyl' mail
  651. reading, you edit the virtual server for the group to have a setting
  652. where `nnbabyl-get-new-mail' to `nil'.
  653.  
  654.    All the mail backends will call `nn'*`-prepare-save-mail-hook'
  655. narrowed to the article to be saved before saving it when reading
  656. incoming mail.
  657.  
  658. 
  659. File: gnus.info,  Node: Choosing a Mail Backend,  Prev: Not Reading Mail,  Up: Getting Mail
  660.  
  661. Choosing a Mail Backend
  662. -----------------------
  663.  
  664.    Gnus will read the mail spool when you activate a mail group.  The
  665. mail file is first copied to your home directory.  What happens after
  666. that depends on what format you want to store your mail in.
  667.  
  668. * Menu:
  669.  
  670. * Unix Mail Box::               Using the (quite) standard Un*x mbox.
  671. * Rmail Babyl::                 Emacs programs use the rmail babyl format.
  672. * Mail Spool::                  Store your mail in a private spool?
  673. * MH Spool::                    An mhspool-like backend.
  674. * Mail Folders::                Having one file for each group.
  675.  
  676. 
  677. File: gnus.info,  Node: Unix Mail Box,  Next: Rmail Babyl,  Up: Choosing a Mail Backend
  678.  
  679. Unix Mail Box
  680. .............
  681.  
  682.    The "nnmbox" backend will use the standard Un*x mbox file to store
  683. mail.  `nnmbox' will add extra headers to each mail article to say
  684. which group it belongs in.
  685.  
  686.    Virtual server settings:
  687.  
  688. `nnmbox-mbox-file'
  689.      The name of the mail box in the user's home directory.
  690.  
  691. `nnmbox-active-file'
  692.      The name of the active file for the mail box.
  693.  
  694. `nnmbox-get-new-mail'
  695.      If non-`nil', `nnmbox' will read incoming mail and split it into
  696.      groups.
  697.  
  698. 
  699. File: gnus.info,  Node: Rmail Babyl,  Next: Mail Spool,  Prev: Unix Mail Box,  Up: Choosing a Mail Backend
  700.  
  701. Rmail Babyl
  702. ...........
  703.  
  704.    The "nnbabyl" backend will use a babyl mail box (aka. "rmail mbox")
  705. to store mail. `nnbabyl' will add extra headers to each mail article to
  706. say which group it belongs in.
  707.  
  708.    Virtual server settings:
  709.  
  710. `nnbabyl-mbox-file'
  711.      The name of the rmail mbox file.
  712.  
  713. `nnbabyl-active-file'
  714.      The name of the active file for the rmail box.
  715.  
  716. `nnbabyl-get-new-mail'
  717.      If non-`nil', `nnbabyl' will read incoming mail.
  718.  
  719. 
  720. File: gnus.info,  Node: Mail Spool,  Next: MH Spool,  Prev: Rmail Babyl,  Up: Choosing a Mail Backend
  721.  
  722. Mail Spool
  723. ..........
  724.  
  725.    The "nnml" spool mail format isn't compatible with any other known
  726. format.  It should be used with some caution.
  727.  
  728.    If you use this backend, Gnus will split all incoming mail into
  729. files, one file for each mail, and put the articles into the
  730. corresponding directories under the directory specified by the
  731. `nnml-directory' variable.  The default value is `~/Mail/'.
  732.  
  733.    You do not have to create any directories beforehand; Gnus will take
  734. care of all that.
  735.  
  736.    If you have a strict limit as to how many files you are allowed to
  737. store in your account, you should not use this backend.  As each mail
  738. gets its own file, you might very well occupy thousands of inodes
  739. within a few weeks.  If this is no problem for you, and it isn't a
  740. problem for you having your friendly systems administrator walking
  741. around, madly, shouting "Who is eating all my inodes?! Who? Who!?!",
  742. then you should know that this is probably the fastest format to use.
  743. You do not have to trudge through a big mbox file just to read your new
  744. mail.
  745.  
  746.    `nnml' is probably the slowest backend when it comes to article
  747. splitting.  It has to create lots of files, and it also generates NOV
  748. databases for the incoming mails.  This makes it the fastest backend
  749. when it comes to reading mail.
  750.  
  751.    Virtual server settings:
  752.  
  753. `nnml-directory'
  754.      All `nnml' directories will be placed under this directory.
  755.  
  756. `nnml-active-file'
  757.      The active file for the `nnml' server.
  758.  
  759. `nnml-newsgroups-file'
  760.      The `nnml' group descriptions file.  *Note Newsgroups File
  761.      Format::.
  762.  
  763. `nnml-get-new-mail'
  764.      If non-`nil', `nnml' will read incoming mail.
  765.  
  766. `nnml-nov-is-evil'
  767.      If non-`nil', this backend will ignore any NOV files.
  768.  
  769. `nnml-nov-file-name'
  770.      The name of the NOV files.  The default is `.overview'.
  771.  
  772. `nnml-prepare-save-mail-hook'
  773.      Hook run narrowed to an article before saving.
  774.  
  775.    If your `nnml' groups and NOV files get totally out of whack, you
  776. can do a complete update by typing `M-x nnml-generate-nov-databases'.
  777. This command will trawl through the entire `nnml' hierarchy, looking at
  778. each and every article, so it might take a while to complete.  A better
  779. interface to this functionality can be found in the server buffer
  780. (*note Server Commands::.).
  781.  
  782. 
  783. File: gnus.info,  Node: MH Spool,  Next: Mail Folders,  Prev: Mail Spool,  Up: Choosing a Mail Backend
  784.  
  785. MH Spool
  786. ........
  787.  
  788.    `nnmh' is just like `nnml', except that is doesn't generate NOV
  789. databases and it doesn't keep an active file.  This makes `nnmh' a
  790. *much* slower backend than `nnml', but it also makes it easier to write
  791. procmail scripts for.
  792.  
  793.    Virtual server settings:
  794.  
  795. `nnmh-directory'
  796.      All `nnmh' directories will be located under this directory.
  797.  
  798. `nnmh-get-new-mail'
  799.      If non-`nil', `nnmh' will read incoming mail.
  800.  
  801. `nnmh-be-safe'
  802.      If non-`nil', `nnmh' will go to ridiculous lengths to make sure
  803.      that the articles in the folder are actually what Gnus thinks they
  804.      are.  It will check date stamps and stat everything in sight, so
  805.      setting this to `t' will mean a serious slow-down.  If you never
  806.      use anything but Gnus to read the `nnmh' articles, you do not have
  807.      to set this variable to `t'.
  808.  
  809. 
  810. File: gnus.info,  Node: Mail Folders,  Prev: MH Spool,  Up: Choosing a Mail Backend
  811.  
  812. Mail Folders
  813. ............
  814.  
  815.    `nnfolder' is a backend for storing each mail group in a separate
  816. file.  Each file is in the standard Un*x mbox format.  `nnfolder' will
  817. add extra headers to keep track of article numbers and arrival dates.
  818.  
  819.    Virtual server settings:
  820.  
  821. `nnfolder-directory'
  822.      All the `nnfolder' mail boxes will be stored under this directory.
  823.  
  824. `nnfolder-active-file'
  825.      The name of the active file.
  826.  
  827. `nnfolder-newsgroups-file'
  828.      The name of the group descriptions file.  *Note Newsgroups File
  829.      Format::.
  830.  
  831. `nnfolder-get-new-mail'
  832.      If non-`nil', `nnfolder' will read incoming mail.
  833.  
  834.    If you have lots of `nnfolder'-like files you'd like to read with
  835. `nnfolder', you can use the `M-x nnfolder-generate-active-file' command
  836. to make `nnfolder' aware of all likely files in `nnfolder-directory'.
  837.  
  838. 
  839. File: gnus.info,  Node: Other Sources,  Next: Combined Groups,  Prev: Getting Mail,  Up: Select Methods
  840.  
  841. Other Sources
  842. =============
  843.  
  844.    Gnus can do more than just read news or mail.  The methods described
  845. below allow Gnus to view directories and files as if they were
  846. newsgroups.
  847.  
  848. * Menu:
  849.  
  850. * Directory Groups::      You can read a directory as if it was a newsgroup.
  851. * Anything Groups::       Dired?  Who needs dired?
  852. * Document Groups::       Single files can be the basis of a group.
  853. * SOUP::                  Reading SOUP packets "offline".
  854. * Web Searches::          Creating groups from articles that match a string.
  855. * Mail-To-News Gateways:: Posting articles via mail-to-news gateways.
  856.  
  857. 
  858. File: gnus.info,  Node: Directory Groups,  Next: Anything Groups,  Up: Other Sources
  859.  
  860. Directory Groups
  861. ----------------
  862.  
  863.    If you have a directory that has lots of articles in separate files
  864. in it, you might treat it as a newsgroup.  The files have to have
  865. numerical names, of course.
  866.  
  867.    This might be an opportune moment to mention `ange-ftp' (and its
  868. successor `efs'), that most wonderful of all wonderful Emacs packages.
  869. When I wrote `nndir', I didn't think much about it--a backend to read
  870. directories.  Big deal.
  871.  
  872.    `ange-ftp' changes that picture dramatically.  For instance, if you
  873. enter the `ange-ftp' file name `/ftp.hpc.uh.edu:/pub/emacs/ding-list/'
  874. as the directory name, `ange-ftp' or `efs' will actually allow you to
  875. read this directory over at `sina' as a newsgroup.  Distributed news
  876. ahoy!
  877.  
  878.    `nndir' will use NOV files if they are present.
  879.  
  880.    `nndir' is a "read-only" backend--you can't delete or expire
  881. articles with this method.  You can use `nnmh' or `nnml' for whatever
  882. you use `nndir' for, so you could switch to any of those methods if you
  883. feel the need to have a non-read-only `nndir'.
  884.  
  885. 
  886. File: gnus.info,  Node: Anything Groups,  Next: Document Groups,  Prev: Directory Groups,  Up: Other Sources
  887.  
  888. Anything Groups
  889. ---------------
  890.  
  891.    From the `nndir' backend (which reads a single spool-like
  892. directory), it's just a hop and a skip to `nneething', which pretends
  893. that any arbitrary directory is a newsgroup.  Strange, but true.
  894.  
  895.    When `nneething' is presented with a directory, it will scan this
  896. directory and assign article numbers to each file.  When you enter such
  897. a group, `nneething' must create "headers" that Gnus can use.  After
  898. all, Gnus is a newsreader, in case you're forgetting. `nneething' does
  899. this in a two-step process.  First, it snoops each file in question.
  900. If the file looks like an article (i.e., the first few lines look like
  901. headers), it will use this as the head.  If this is just some arbitrary
  902. file without a head (e.g. a C source file), `nneething' will cobble up
  903. a header out of thin air.  It will use file ownership, name and date
  904. and do whatever it can with these elements.
  905.  
  906.    All this should happen automatically for you, and you will be
  907. presented with something that looks very much like a newsgroup.
  908. Totally like a newsgroup, to be precise.  If you select an article, it
  909. will be displayed in the article buffer, just as usual.
  910.  
  911.    If you select a line that represents a directory, Gnus will pop you
  912. into a new summary buffer for this `nneething' group.  And so on.  You
  913. can traverse the entire disk this way, if you feel like, but remember
  914. that Gnus is not dired, really, and does not intend to be, either.
  915.  
  916.    There are two overall modes to this action--ephemeral or solid.  When
  917. doing the ephemeral thing (i.e., `G D' from the group buffer), Gnus
  918. will not store information on what files you have read, and what files
  919. are new, and so on.  If you create a solid `nneething' group the normal
  920. way with `G m', Gnus will store a mapping table between article numbers
  921. and file names, and you can treat this group like any other groups.
  922. When you activate a solid `nneething' group, you will be told how many
  923. unread articles it contains, etc., etc.
  924.  
  925.    Some variables:
  926.  
  927. `nneething-map-file-directory'
  928.      All the mapping files for solid `nneething' groups will be stored
  929.      in this directory, which defaults to `~/.nneething/'.
  930.  
  931. `nneething-exclude-files'
  932.      All files that match this regexp will be ignored.  Nice to use to
  933.      exclude auto-save files and the like, which is what it does by
  934.      default.
  935.  
  936. `nneething-map-file'
  937.      Name of the map files.
  938.  
  939. 
  940. File: gnus.info,  Node: Document Groups,  Next: SOUP,  Prev: Anything Groups,  Up: Other Sources
  941.  
  942. Document Groups
  943. ---------------
  944.  
  945.    `nndoc' is a cute little thing that will let you read a single file
  946. as a newsgroup.  Several files types are supported:
  947.  
  948. `babyl'
  949.      The babyl (rmail) mail box.
  950.  
  951. `mbox'
  952.      The standard Unix mbox file.
  953.  
  954. `mmdf'
  955.      The MMDF mail box format.
  956.  
  957. `news'
  958.      Several news articles appended into a file.
  959.  
  960. `rnews'
  961.      The rnews batch transport format.
  962.  
  963. `forward'
  964.      Forwarded articles.
  965.  
  966. `mime-digest'
  967.      MIME (RFC 1341) digest format.
  968.  
  969. `standard-digest'
  970.      The standard (RFC 1153) digest format.
  971.  
  972. `slack-digest'
  973.      Non-standard digest format--matches most things, but does it badly.
  974.  
  975.    You can also use the special "file type" `guess', which means that
  976. `nndoc' will try to guess what file type it is looking at.  `digest'
  977. means that `nndoc' should guess what digest type the file is.
  978.  
  979.    `nndoc' will not try to change the file or insert any extra headers
  980. into it--it will simply, like, let you use the file as the basis for a
  981. group.  And that's it.
  982.  
  983.    If you have some old archived articles that you want to insert into
  984. your new & spiffy Gnus mail backend, `nndoc' can probably help you with
  985. that.  Say you have an old `RMAIL' file with mail that you now want to
  986. split into your new `nnml' groups.  You look at that file using `nndoc'
  987. (using the `G f' command in the group buffer (*note Foreign
  988. Groups::.)), set the process mark on all the articles in the buffer (`M
  989. P b', for instance), and then re-spool (`B r') using `nnml'.  If all
  990. goes well, all the mail in the `RMAIL' file is now also stored in lots
  991. of `nnml' directories, and you can delete that pesky `RMAIL' file.  If
  992. you have the guts!
  993.  
  994.    Virtual server variables:
  995.  
  996. `nndoc-article-type'
  997.      This should be one of `mbox', `babyl', `digest', `news', `rnews',
  998.      `mmdf', `forward', `rfc934', `rfc822-forward', `mime-digest',
  999.      `standard-digest', `slack-digest', `clari-briefs' or `guess'.
  1000.  
  1001. `nndoc-post-type'
  1002.      This variable says whether Gnus is to consider the group a news
  1003.      group or a mail group.  There are two legal values:  `mail' (the
  1004.      default) and `news'.
  1005.  
  1006. * Menu:
  1007.  
  1008. * Document Server Internals::   How to add your own document types.
  1009.  
  1010. 
  1011. File: gnus.info,  Node: Document Server Internals,  Up: Document Groups
  1012.  
  1013. Document Server Internals
  1014. .........................
  1015.  
  1016.    Adding new document types to be recognized by `nndoc' isn't
  1017. difficult.  You just have to whip up a definition of what the document
  1018. looks like, write a predicate function to recognize that document type,
  1019. and then hook into `nndoc'.
  1020.  
  1021.    First, here's an example document type definition:
  1022.  
  1023.      (mmdf
  1024.       (article-begin .  "^\^A\^A\^A\^A\n")
  1025.       (body-end .  "^\^A\^A\^A\^A\n"))
  1026.  
  1027.    The definition is simply a unique "name" followed by a series of
  1028. regexp pseudo-variable settings.  Below are the possible
  1029. variables--don't be daunted by the number of variables; most document
  1030. types can be defined with very few settings:
  1031.  
  1032. `first-article'
  1033.      If present, `nndoc' will skip past all text until it finds
  1034.      something that match this regexp.  All text before this will be
  1035.      totally ignored.
  1036.  
  1037. `article-begin'
  1038.      This setting has to be present in all document type definitions.
  1039.      It says what the beginning of each article looks like.
  1040.  
  1041. `head-begin-function'
  1042.      If present, this should be a function that moves point to the head
  1043.      of the article.
  1044.  
  1045. `nndoc-head-begin'
  1046.      If present, this should be a regexp that matches the head of the
  1047.      article.
  1048.  
  1049. `nndoc-head-end'
  1050.      This should match the end of the head of the article.  It defaults
  1051.      to `^$'--the empty line.
  1052.  
  1053. `body-begin-function'
  1054.      If present, this function should move point to the beginning of
  1055.      the body of the article.
  1056.  
  1057. `body-begin'
  1058.      This should match the beginning of the body of the article.  It
  1059.      defaults to `^\n'.
  1060.  
  1061. `body-end-function'
  1062.      If present, this function should move point to the end of the body
  1063.      of the article.
  1064.  
  1065. `body-end'
  1066.      If present, this should match the end of the body of the article.
  1067.  
  1068. `file-end'
  1069.      If present, this should match the end of the file.  All text after
  1070.      this regexp will be totally ignored.
  1071.  
  1072.    So, using these variables `nndoc' is able to dissect a document file
  1073. into a series of articles, each with a head and a body.  However, a few
  1074. more variables are needed since not all document types are all that
  1075. news-like--variables needed to transform the head or the body into
  1076. something that's palatable for Gnus:
  1077.  
  1078. `prepare-body-function'
  1079.      If present, this function will be called when requesting an
  1080.      article.  It will be called with point at the start of the body,
  1081.      and is useful if the document has encoded some parts of its
  1082.      contents.
  1083.  
  1084. `article-transform-function'
  1085.      If present, this function is called when requesting an article.
  1086.      It's meant to be used for more wide-ranging transformation of both
  1087.      head and body of the article.
  1088.  
  1089. `generate-head-function'
  1090.      If present, this function is called to generate a head that Gnus
  1091.      can understand.  It is called with the article number as a
  1092.      parameter, and is expected to generate a nice head for the article
  1093.      in question.  It is called when requesting the headers of all
  1094.      articles.
  1095.  
  1096.    Let's look at the most complicated example I can come up
  1097. with--standard digests:
  1098.  
  1099.      (standard-digest
  1100.       (first-article . ,(concat "^" (make-string 70 ?-) "\n\n+"))
  1101.       (article-begin . ,(concat "\n\n" (make-string 30 ?-) "\n\n+"))
  1102.       (prepare-body-function . nndoc-unquote-dashes)
  1103.       (body-end-function . nndoc-digest-body-end)
  1104.       (head-end . "^ ?$")
  1105.       (body-begin . "^ ?\n")
  1106.       (file-end . "^End of .*digest.*[0-9].*\n\\*\\*\\|^End of.*Digest *$")
  1107.       (subtype digest guess))
  1108.  
  1109.    We see that all text before a 70-width line of dashes is ignored; all
  1110. text after a line that starts with that `^End of' is also ignored; each
  1111. article begins with a 30-width line of dashes; the line separating the
  1112. head from the body may contain a single space; and that the body is run
  1113. through `nndoc-unquote-dashes' before being delivered.
  1114.  
  1115.    To hook your own document definition into `nndoc', use the
  1116. `nndoc-add-type' function.  It takes two parameters--the first is the
  1117. definition itself and the second (optional) parameter says where in the
  1118. document type definition alist to put this definition.  The alist is
  1119. traversed sequentially, and `nndoc-TYPE-type-p' is called for a given
  1120. type `TYPE'.  So `nndoc-mmdf-type-p' is called to see whether a document
  1121. is of `mmdf' type, and so on.  These type predicates should return
  1122. `nil' if the document is not of the correct type; `t' if it is of the
  1123. correct type; and a number if the document might be of the correct
  1124. type.  A high number means high probability; a low number means low
  1125. probability with `0' being the lowest legal number.
  1126.  
  1127. 
  1128. File: gnus.info,  Node: SOUP,  Next: Web Searches,  Prev: Document Groups,  Up: Other Sources
  1129.  
  1130. SOUP
  1131. ----
  1132.  
  1133.    In the PC world people often talk about "offline" newsreaders.  These
  1134. are thingies that are combined reader/news transport monstrosities.
  1135. With built-in modem programs.  Yecchh!
  1136.  
  1137.    Of course, us Unix Weenie types of human beans use things like
  1138. `uucp' and, like, `nntpd' and set up proper news and mail transport
  1139. things like Ghod intended.  And then we just use normal newsreaders.
  1140.  
  1141.    However, it can sometimes be convenient to do something a that's a
  1142. bit easier on the brain if you have a very slow modem, and you're not
  1143. really that interested in doing things properly.
  1144.  
  1145.    A file format called SOUP has been developed for transporting news
  1146. and mail from servers to home machines and back again.  It can be a bit
  1147. fiddly.
  1148.  
  1149.    First some terminology:
  1150.  
  1151. "server"
  1152.      This is the machine that is connected to the outside world and
  1153.      where you get news and/or mail from.
  1154.  
  1155. "home machine"
  1156.      This is the machine that you want to do the actual reading and
  1157.      responding on.  It is typically not connected to the rest of the
  1158.      world in any way.
  1159.  
  1160. "packet"
  1161.      Something that contains messages and/or commands.  There are two
  1162.      kinds of packets:
  1163.  
  1164.     "message packets"
  1165.           These are packets made at the server, and typically contain
  1166.           lots of messages for you to read.  These are called
  1167.           `SoupoutX.tgz' by default, where X is a number.
  1168.  
  1169.     "response packets"
  1170.           These are packets made at the home machine, and typically
  1171.           contains replies that you've written.  These are called
  1172.           `SoupinX.tgz' by default, where X is a number.
  1173.  
  1174.   1. You log in on the server and create a SOUP packet.  You can either
  1175.      use a dedicated SOUP thingie (like the `awk' program), or you can
  1176.      use Gnus to create the packet with its SOUP commands (`O s' and/or
  1177.      `G s b'; and then `G s p') (*note SOUP Commands::.).
  1178.  
  1179.   2. You transfer the packet home.  Rail, boat, car or modem will do
  1180.      fine.
  1181.  
  1182.   3. You put the packet in your home directory.
  1183.  
  1184.   4. You fire up Gnus on your home machine using the `nnsoup' backend as
  1185.      the native or secondary server.
  1186.  
  1187.   5. You read articles and mail and answer and followup to the things
  1188.      you want (*note SOUP Replies::.).
  1189.  
  1190.   6. You do the `G s r' command to pack these replies into a SOUP
  1191.      packet.
  1192.  
  1193.   7. You transfer this packet to the server.
  1194.  
  1195.   8. You use Gnus to mail this packet out with the `G s s' command.
  1196.  
  1197.   9. You then repeat until you die.
  1198.  
  1199.  
  1200.    So you basically have a bipartite system--you use `nnsoup' for
  1201. reading and Gnus for packing/sending these SOUP packets.
  1202.  
  1203. * Menu:
  1204.  
  1205. * SOUP Commands::     Commands for creating and sending SOUP packets
  1206. * SOUP Groups::       A backend for reading SOUP packets.
  1207. * SOUP Replies::      How to enable `nnsoup' to take over mail and news.
  1208.  
  1209. 
  1210. File: gnus.info,  Node: SOUP Commands,  Next: SOUP Groups,  Up: SOUP
  1211.  
  1212. SOUP Commands
  1213. .............
  1214.  
  1215.    These are commands for creating and manipulating SOUP packets.
  1216.  
  1217. `G s b'
  1218.      Pack all unread articles in the current group
  1219.      (`gnus-group-brew-soup').  This command understands the
  1220.      process/prefix convention.
  1221.  
  1222. `G s w'
  1223.      Save all SOUP data files (`gnus-soup-save-areas').
  1224.  
  1225. `G s s'
  1226.      Send all replies from the replies packet
  1227.      (`gnus-soup-send-replies').
  1228.  
  1229. `G s p'
  1230.      Pack all files into a SOUP packet (`gnus-soup-pack-packet').
  1231.  
  1232. `G s r'
  1233.      Pack all replies into a replies packet (`nnsoup-pack-replies').
  1234.  
  1235. `O s'
  1236.      This summary-mode command adds the current article to a SOUP packet
  1237.      (`gnus-soup-add-article').  It understands the process/prefix
  1238.      convention (*note Process/Prefix::.).
  1239.  
  1240.    There are a few variables to customize where Gnus will put all these
  1241. thingies:
  1242.  
  1243. `gnus-soup-directory'
  1244.      Directory where Gnus will save intermediate files while composing
  1245.      SOUP packets.  The default is `~/SoupBrew/'.
  1246.  
  1247. `gnus-soup-replies-directory'
  1248.      This is what Gnus will use as a temporary directory while sending
  1249.      our reply packets.  `~/SoupBrew/SoupReplies/' is the default.
  1250.  
  1251. `gnus-soup-prefix-file'
  1252.      Name of the file where Gnus stores the last used prefix.  The
  1253.      default is `gnus-prefix'.
  1254.  
  1255. `gnus-soup-packer'
  1256.      A format string command for packing a SOUP packet.  The default is
  1257.      `tar cf - %s | gzip > $HOME/Soupout%d.tgz'.
  1258.  
  1259. `gnus-soup-unpacker'
  1260.      Format string command for unpacking a SOUP packet.  The default is
  1261.      `gunzip -c %s | tar xvf -'.
  1262.  
  1263. `gnus-soup-packet-directory'
  1264.      Where Gnus will look for reply packets.  The default is `~/'.
  1265.  
  1266. `gnus-soup-packet-regexp'
  1267.      Regular expression matching SOUP reply packets in
  1268.      `gnus-soup-packet-directory'.
  1269.  
  1270.